//
//  UserAccountViewModel.swift
//  新浪微博
//
//  Created by seteny on 16/7/12.
//  Copyright © 2016年 seteny. All rights reserved.



import UIKit


//封装OAuth登陆相关接口
class UserAccountViewModel: NSObject {

    //单例访问点
    static let shareUserAccount: UserAccountViewModel = UserAccountViewModel()
    
    //获取用户对象,从沙盒路径里面解档对象
    var userAccount: UserAccount? {
        
        //解档用户对象
        return UserAccount.loadUserAccount()
    }
    
    
    // 构造函数私有化
    private override init() {
        super.init()
    }
    
    
    /*
    
        如果accessToken为nil,不用判断,表示未登录
        如果accessToken不为nil,判读accessToken是否过期,不过期返回一个正确的accessToken,过期返回nil
    */
    var accessToken: String? {
        
        // 判断accessToken 是否为nil ,为nil 表示未登录
        guard let token = userAccount?.access_token else {
            return nil
        }
        
        //token 一定有值,过期时间大于我们当前时间,表示没有过期
        let result = userAccount?.expiresDate?.compare(NSDate())
        // 使用降序表示我们进行从大到小
        if result == NSComparisonResult.OrderedDescending {
            return token
        } else {
            return nil
        }
    }
    
    
    // 封装判断accessToken是否为nil,表示登陆结果
    var isLogin: Bool {
        return accessToken != nil
    }
    
    //通过授权码(code)获取accessToken
    func requestAccesstoken(code: String, callBack: (isSuccess: Bool) -> ()) {
        
        NetworkTools.sharedTools.requesAccesstoken(code) { (response, error) -> () in
            
            if error != nil {
                callBack(isSuccess: false)
                return
            }
            
            //  代码执行到此,成功的回调
            guard let dict = response as? [String: AnyObject] else {
                print("不是一个正确的josn格式")
                callBack(isSuccess: false)
                return
            }
            
            //代码执行到此,dict一定有值,并且是符合我们需要的类型
            let userAccount = UserAccount(dict: dict)
            
            //通过accessToken 和 uid获取用户信息
        
            self.requestUserInfo(userAccount, callBack: callBack)
        }
    }
    
    
    //获取用户信息
    private func requestUserInfo(userAccount: UserAccount, callBack: (isSuccess: Bool) -> ()) {
        
        NetworkTools.sharedTools.requesUserInfo(userAccount) { (response, error) -> () in
            
            if error != nil {
                
                callBack(isSuccess: false)
                return
            }
            
            guard let dict = response as? [String: AnyObject] else {
                print("不是一个正确的josn格式")
                callBack(isSuccess: false)
                return
            }
            
            //代码执行到此字典一定有值
            let name = dict["name"]
            let avatar_large = dict["avatar_large"]
            
            //设置用户名和头像
            userAccount.name = name as? String
            userAccount.avatar_large = avatar_large as? String
            
            //保存用户对象
            let result = userAccount.saveUserAccount()
            
            if result {
                callBack(isSuccess: true)
            } else {
                callBack(isSuccess: false)
            }
            
        }
        
    }
    
        
    
        
}


